package de.akabahn.ebd.stw.zdxfc.prs.commande.listener;

import static de.akabahn.ebd.stw.zdxfc.prs.commande.ZDXFCCommandeConstants.MOUSE_BUTTON_LEFT;
import static de.akabahn.ebd.stw.zdxfc.prs.commande.ZDXFCCommandeConstants.MOUSE_BUTTON_RIGHT;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import de.akabahn.ebd.stw.zdxfc.prs.commande.ZDXFCCommandeMain;
import de.akabahn.ebd.stw.zdxfc.prs.commande.elemente.Taste;

/**
 * <code>MouseListener</code> Implementierung fuer die Maus-Aktionen auf einer Taste des Bedienpults.
 *  
 * @author Peter Eimann
 * @since 1.0
 * @version 1.2
 */
public class TastenListener implements MouseListener {

	protected ZDXFCCommandeMain main;
	protected Taste pressedTaste;

	/**
	 * Initialisierung des Listeners
	 * 
	 * @param main Referenz auf die Hauptklasse
	 */
	public TastenListener(ZDXFCCommandeMain main) {
		this.main = main;
	}

	/**
	 * Wird aufgerufen, wenn ein Mausklick auf der Taste erfolgt ist (Maustaste gedrueckt),
	 * die gedrueckte Taste wird gespeichert.
	 */
	@Override
	public void mousePressed(MouseEvent e) {
		pressedTaste = (Taste)e.getComponent();
	}

	/**
	 * Wird aufgerufen, wenn ein Mausklick auf der Taste erfolgt ist (Maustaste losgelassen).
	 * Wenn der linke Mouse-Button gedrueckt wurde, wird <code>Taste.tasteGedrueckt()</code> aufgerufen.<br>
	 * Im Demo-Mode der Anwendung wird die Ausleuchtung der Taste abwechselnd ein- und ausgeschaltet und beim Druecken
	 * der rechten Maustaste wird die Ausleuchtung auf Blinkend geschaltet.
	 * 
	 * @see Taste#tasteGedrueckt()
	 */
	@Override
	public void mouseReleased(MouseEvent e) {
		if ((Taste)e.getComponent() == pressedTaste) {
			if (e.getButton() == MOUSE_BUTTON_LEFT) {
				pressedTaste.tasteGedrueckt();
			}

			if (main.isDemoMode()) {
				if (!pressedTaste.isAn()) {
					pressedTaste.ausleuchtungAn();
				} else {
					pressedTaste.ausleuchtungAus();
				}
			}
			
			if (main.isDemoMode()) {
				if (e.getButton() == MOUSE_BUTTON_RIGHT) {
					pressedTaste.ausleuchtungBlinkt();
				}
			}
		}

		pressedTaste = null;
	}

	/**
	 * Die gespeicherte Taste wird geloescht, wenn die Maus aus dem Element hinausbewegt wird.
	 */
	@Override
	public void mouseExited(MouseEvent e) {
		pressedTaste = null;
	}

	/**
	 * keine Aktion
	 */
	@Override
	public void mouseClicked(MouseEvent e) {
	}

	/**
	 * keine Aktion
	 */
	@Override
	public void mouseEntered(MouseEvent e) {
	}
}
